#ifndef CPP_TOAST_H
#define CPP_TOAST_H

#include <utils/Timer.h>

class Context;
class ViewGroup;

//@brief 吐司
//@author cvte
//@description 自管理自身的创建，销毁
//for example:
//Toast::makeText(*this, "hello", Toast::LENGTH_LONG)->show();
class Toast {
   public:
    class ToastListener {
        public:
        //@method Toast自动或被动消失时回调
        virtual void onToastCancel(Toast& toast);
    };

    Toast(Context& context);
    ~Toast();

    //@method 设置显示内容
    void addViewGroup(ViewGroup* viewGroup);
    ViewGroup* getViewGroup();

    //@method 显示
    void show();

    //@method 取消
    void cancel();

    //@method 取消Toast但不取消定时器，目前用于内部逻辑
    void cancelButNoStopTimer();

    //@method 设置显示时间，长时间或短时间，单位：毫秒
    void setDurationMs(int durationMs);
    //@method 获取显示时间，单位：毫秒
    int getDurationMs();
    //@method 设置监听
    void setListener(ToastListener& listener);

   private:
    int mDurationMs = 0;
    Context* mContext = nullptr;
    ViewGroup* mViewGroup = nullptr;
    Timer* mTimer = nullptr;
    ToastListener* mListener = nullptr;
};

#endif /* CPP_TOAST_H */